package com.easyCode.sqlBuilder.sqlInfo;

import com.easyCode.mysql.constants.MysqlKeyTypeConstants;
import com.easyCode.sqlBuilder.SqlInfo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;

/**
 * 提供构建索引sql相关信息
 * @author 大忽悠
 * @create 2022/11/30 15:25
 */
@Data
public abstract class BaseKeySqlInfo implements SqlInfo {
    /**
     * 索引类型
     */
    protected String keyType;
    /**
     * 索引名
     */
    protected String keyName;

    //-----------------------非外键情况查看的索引列------------------------------------------

    /**
     * 索引列集合
     */
    protected List<String> columns=new ArrayList<>();

    //-----------------只在设置外键的情况下起作用---------------------------------------

    /**
     * 主表名
     */
    protected String masterTableName;
    /**
     * 受约束的主表字段
     */
    protected List<String> masterColumns=new ArrayList<>();
    /**
     * 受约束的从表字段: 外键所在表
     */
    protected List<String> salveColumns=new ArrayList<>();


    /**
     * @return 根据自身掌握的sql信息构建出一部分或者完整的sql语句
     */
    @Override
    public String buildSql() {
        return doBuildSql();
    }

    public abstract boolean isPrimary();

    public String getPrimaryKeyColumnName() {
        return isPrimary() ? columns.get(0) : null;
    }

    protected abstract String doBuildSql();

    public void addColumn(String[] toArray) {
         this.columns.addAll(List.of(toArray));
    }

    public void addSalveColumn(String[] toArray){
        this.salveColumns.addAll(List.of(toArray));
    };

    public void addMasterColumn(String[] masterColumns){
      this.masterColumns.addAll(List.of(masterColumns));
    };
}
